@深巷
2年前 提问
1个回答

数据库注入攻击常用手段有哪些

安全小白成长记
2年前

数据库注入攻击常用手段有以下这些:

  • 重言式注入:又称为永真式,此类攻击是在条件语句中注入代码,使生成的表达式判定结果永远为真,从而绕过认证或访问机制。

  • 联合查询注入:联合查询是一种众所周知的SQL注入技术,攻击者利用一个脆弱的参数去改变给定查询返回的数据集。联合查询最常用的用法是绕过认证页面获取数据。

  • JavaScript注入:MongoDBServer支持JavaScript,这使得在数据引擎进行复杂事务和查询成为可能,但是传递不干净的用户输入到这些查询中可以注入任意的JavaScript代码,导致非法的数据获取或篡改。

  • 盲注:当页面没有回显时,那么我们可以通过$regex正则表达式来达到和传统SQL注入中substr()函数相同的功能,而且NoSQL用到的基本上都是布尔盲注。

  • AND注入:这种注入就是攻击者会会构造由”&”操作符和用户引入的的参数组成的正常查询在LDAP目录中搜索,如果攻击者输入一个有效地用户名,然后再这个名字后面注入恰当的语句,密码检查机制就会被绕过。

  • OR注入:攻击者会构造由”|”操作符和用户引入的的参数组成的正常查询在LDAP目录中搜索,攻击者可以注入代码,维持正确的过滤器结构但能使用查询实现他自己的目标。

  • GET注入:提交数据的方式是GET,注入点的位置在GET参数部分。

  • POST注入:使用POST方式提交数据,注入点位置在POST数据部分,常发生在表单中。

  • Cookie注入:HTTP请求的时候会带上客户端的Cookie,注入点存在Cookie当中的某个字段中。

  • HTTP头部注入:注入点在HTTP请求头部的某个字段中。比如存在User-Agent字段中。严格讲的话,Cookie其实应该也是算头部注入的一种形式。因为在HTTP请求的时候,Cookie是头部的一个字段。

数据库对数据库注入攻击的预防措施有以下这些:

  • 权限区分:普通用户与系统管理员用户的权限要有严格的区分。由于Drop语句关系到数据库的基本对象,故要操作这个语句用户必须有相关的权限。在权限设计中,对于终端用户,即应用软件的使用者,没有必要给他们数据库对象的建立、删除等权限。那么即使在他们使用SQL语句中带有嵌入式的恶意代码,由于其用户权限的限制,这些代码也将无法被执行。故应用程序在设计的时候,最好把系统管理员的用户与普通用户区分开来。如此可以最大限度的减少注入式攻击对数据库带来的危害。

  • 使用参数化语句:如果在编写SQL语句的时候,用户输入的变量不是直接嵌入到SQL语句,而是通过参数来传递这个变量的话,那么就可以有效的防治SQL注入式攻击。也就是说,用户的输入绝对不能够直接被嵌入到SQL语句中。与此相反,用户的输入的内容必须进行过滤,或者使用参数化的语句来传递用户输入的变量。参数化的语句使用参数而不是将用户输入变量嵌入到SQL语句中。采用这种措施,可以杜绝大部分的SQL注入式攻击。

  • 对用户的输入进行验证:通过测试类型、长度、格式和范围来验证用户输入,过滤用户输入的内容。这是防止SQL注入式攻击的常见并且行之有效的措施。防治SQL注入式攻击可以采用两种方法,一是加强对用户输入内容的检查与验证;二是强迫使用参数化语句来传递用户输入的内容。在SQLServer数据库中,有比较多的用户输入内容验证工具,可以帮助管理员来对付SQL注入式攻击。测试字符串变量的内容,只接受所需的值。拒绝包含二进制数据、转义序列和注释字符的输入内容。这有助于防止脚本注入,防止某些缓冲区溢出攻击。测试用户输入内容的大小和数据类型,强制执行适当的限制与转换。这即有助于防止有意造成的缓冲区溢出,对于防治注入式攻击有比较明显的效果。

  • 多使用数据库自带的安全参数:为了减少注入式攻击对于SQL Server数据库的不良影响,在SQLServer数据库专门设计了相对安全的SQL参数。在数据库设计过程中,工程师要尽量采用这些参数来杜绝恶意的SQL注入式攻击。如在SQL Server数据库中提供了Parameters集合。这个集合提供了类型检查和长度验证的功能。如果管理员采用了Parameters这个集合的话,则用户输入的内容将被视为字符值而不是可执行代码。即使用户输入的内容中含有可执行代码,则数据库也会过滤掉。因为此时数据库只把它当作普通的字符来处理。

  • 多层环境防止SQL注入:在多层应用环境中,用户输入的所有数据都应该在验证之后才能被允许进入到可信区域。未通过验证过程的数据应被数据库拒绝,并向上一层返回一个错误信息。实现多层验证。对无目的的恶意用户采取的预防措施,对坚定的攻击者可能无效。

  • 设置陷阱账号:设置两个帐号,一个是普通管理员帐号,一个是防注入的帐号。将防注入的账号设置的很象管理员,如admin,以制造假象吸引软件的检测,而密码是大于千字以上的中文字符,迫使软件分析账号的时候进入全负荷状态甚至资源耗尽而死机。